package com.example.learningnote.advanced;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.viewpager2.widget.ViewPager2;

import com.example.learningnote.R;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

// ViewPager2 实现可滑动的页面切换
// 基于 RecyclerView：ViewPager2 内置 RecyclerView，利用其视图复用机制，性能更优，支持动态添加/删除页面。
// 支持多种方向：支持水平和垂直滑动，可通过 setOrientation() 设置。
// 右到左（RTL）支持：自动适配右到左语言布局（如阿拉伯语），可通过 setLayoutDirection() 手动配置。
// 灵活的适配器：
// FragmentStateAdapter：用于管理 Fragment 页面。
// RecyclerView.Adapter：用于自定义 View 页面。
// 页面转换动画：通过 setPageTransformer() 支持自定义页面切换动画（如淡入淡出、缩放）。
// 选项卡集成：与 TabLayout 配合使用，通过 TabLayoutMediator 实现选项卡与页面的同步。
// 动态数据管理：支持运行时修改页面集合，结合 DiffUtil 实现高效更新。
// 无内置点击事件：需开发者手动实现页面点击或滑动监听。
public class ViewPager2Activity extends AppCompatActivity {
    private ViewPager2 viewPager;
    private TabLayout tabLayout;
    private ViewPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager2);
        viewPager = findViewById(R.id.viewPager);
        tabLayout = findViewById(R.id.tabLayout);


        // 设置适配器
        adapter = new ViewPagerAdapter(this);
        adapter.addFragment(PageFragment.newInstance("首页内容"), "首页");
        adapter.addFragment(PageFragment.newInstance("消息内容"), "消息");
        adapter.addFragment(PageFragment.newInstance("我的内容"), "我的");
        viewPager.setAdapter(adapter);

        // 绑定 TabLayout 和 ViewPager2
        // TabLayout 和 ViewPager2，确保选项卡与页面一致
        new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> tab.setText(adapter.getPageTitle(position))).attach();

        // 页面切换监听
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int i) {
                super.onPageSelected(i);
                Toast.makeText(ViewPager2Activity.this, "当前页面: " + adapter.getPageTitle(i), Toast.LENGTH_SHORT).show();
            }
        });

        // 监听 Tab 选中事件
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {}
        });
    }
}